﻿using BLL;
using Model;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace HRP.Private.Vencimentos
{
    public partial class Recibo : System.Web.UI.Page
    {
        private hrp_facturacao_funcionario_detalhe _ActualVencimentoFuncionarioDetalhe
        {
            get
            {
                if (ViewState["_ActualVencimentoFuncionarioDetalhe"] != null)
                    return (hrp_facturacao_funcionario_detalhe)ViewState["_ActualVencimentoFuncionarioDetalhe"];

                return null;
            }
            set
            {
                ViewState["_ActualVencimentoFuncionarioDetalhe"] = value;
            }
        }
        public hrp_facturacao_funcionario_detalhe ActualVencimentoFuncionarioDetalhe
        {
            get
            {
                return _ActualVencimentoFuncionarioDetalhe;
            }
            set
            {
                _ActualVencimentoFuncionarioDetalhe = value;
            }
        }

        private List<hrp_facturacao_funcionario_detalhe> _ActualListaVencimentoFuncionarioDetalhe
        {
            get
            {
                if (ViewState["_ActualListaVencimentoFuncionarioDetalhe"] != null)
                    return (List<hrp_facturacao_funcionario_detalhe>)ViewState["_ActualListaVencimentoFuncionarioDetalhe"];

                return null;
            }
            set
            {
                ViewState["_ActualListaVencimentoFuncionarioDetalhe"] = value;
            }
        }
        public List<hrp_facturacao_funcionario_detalhe> ActualListaVencimentoFuncionarioDetalhe
        {
            get
            {
                return _ActualListaVencimentoFuncionarioDetalhe;
            }
            set
            {
                _ActualListaVencimentoFuncionarioDetalhe = value;
            }
        }
       
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack && Request.QueryString["id"] != null && Session["EmpresaActual"] != null)
            {                
                var funcId = 0;
                Int32.TryParse(Request.QueryString["id"], out funcId);
                var vencId = ObterVencimentoID();
                int empresaId = ((hrp_empresas)Session["EmpresaActual"]).id;
                ActualListaVencimentoFuncionarioDetalhe = Facturacao_BLL.Instance.ObterFacturasFuncionario(funcId, empresaId).OrderByDescending(f=>f.ano_referente).ThenByDescending(f=>f.mes_referente).ToList();
                if (ActualListaVencimentoFuncionarioDetalhe != null && ActualListaVencimentoFuncionarioDetalhe.Count>0)
                {
                    ActualVencimentoFuncionarioDetalhe = Facturacao_BLL.Instance.ObterFacturaFuncionarioDetalhe(funcId, vencId> 0 ? vencId : ActualListaVencimentoFuncionarioDetalhe.LastOrDefault().id_facturacao_geral,empresaId );
                    DefineListaFacturasAnteriores();
                }
            }
            recibosAnteriores.SelectedIndexChanged += new EventHandler(facturasAnteriores_SelectedIndexChanged);
            imprimirBut.Click += imprimirBut_Click;
        }

        void imprimirBut_Click(object sender, EventArgs e)
        {
            if (ActualVencimentoFuncionarioDetalhe != null)
            {
                string url = string.Format("~/Private/Impressoes/Vencimento.aspx?id={0}&reciboId={1}",
                    ActualVencimentoFuncionarioDetalhe.id_facturacao_geral,
                    ActualVencimentoFuncionarioDetalhe.id);
                Imprimir(Page.ResolveUrl(url));
            }
        }

        private void Imprimir(string url)
        {
            HttpContext context = HttpContext.Current;
            Page page = (Page)context.Handler;
            string script;
            script = @"window.open(""{0}"", ""{1}"");";
            script = String.Format(script, url, "_blank");
            ScriptManager.RegisterStartupScript(page,
                typeof(Page),
                "Redirect",
                script,
                true);            
        }

        private int ObterVencimentoID()
        {
            int vencId = 0;
            if (Request.QueryString["vencId"] != null)
            {
                Int32.TryParse(Request.QueryString["vencId"], out vencId);
            }
            return vencId;
        }
        private void DefineListaFacturasAnteriores()
        {
            var funcId = 0;
            Int32.TryParse(Request.QueryString["id"], out funcId);
            foreach (hrp_facturacao_funcionario_detalhe factura in ActualListaVencimentoFuncionarioDetalhe)
            {
                ListItem item = new ListItem();
                item.Value = factura.id_facturacao_geral.ToString();
                item.Text = new CultureInfo("pt-PT").DateTimeFormat.GetMonthName(Convert.ToInt32(factura.mes_referente)) + " " + factura.ano_referente;
                if (factura.id == ActualVencimentoFuncionarioDetalhe.id)
                    item.Selected = true;

                recibosAnteriores.Items.Add(item);
            }
        }       

        void facturasAnteriores_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (Session["EmpresaActual"] != null)
            {
                int empresaId = ((hrp_empresas)Session["EmpresaActual"]).id;
                ActualVencimentoFuncionarioDetalhe = Facturacao_BLL.Instance.ObterFacturaFuncionarioDetalhe(ActualVencimentoFuncionarioDetalhe.id_funcionario, Convert.ToInt32(recibosAnteriores.SelectedValue), empresaId);
            }
        }
         
    }
}